home *** CD-ROM | disk | FTP | other *** search
/ Scene 96 / Scene 96 International Edition (Zyklop Software) (Disc 2) (1997).iso / misc / coding / e_os208 / resource / eos.doc < prev    next >
Text File  |  1996-07-30  |  28KB  |  847 lines

  1.  
  2. ───────────────────────────────────────────────────────────────────────────────
  3. E.O.S. Eclipse Operating System  Version 2.08                     Documentation
  4. Copyright (c) Eclipse 1995-96
  5. ───────────────────────────────────────────────────────────────────────────────
  6.                                      __
  7.                                     /\_\         _______
  8.                 _______            / / /        / ___  /\
  9.                / _____/\          / / /        / /\_/ / /
  10.               / /\____\/______   / / / __     / _____/ /_______
  11.              / _____/\ /\  ___\ / /_/ /\ \   / /\____\//\  ____\
  12.             / /\____\/ \ \ \__/ \ \ \ \ \ \ /_/ /      \ \ \___/_
  13.            /______/\    \ \ \____\ \_\ \ \ \\_\/_______ \ \  ____\
  14.            \______\/     \ \_____\\/_/  \ \_\  /\  ____\ \ \ \___/_
  15.                           \/_____/       \/_/  \ \ \___/_ \ \______\
  16.                                                 \ \_____ \ \/______/
  17.                                                  \/_____\ \
  18.                                                    /\______\
  19.                                                    \/______/
  20.  
  21.  
  22. ───────────────────────────────────────────────────────────────────────────────
  23. Présentation des différents modules de l'E.O.S
  24. ───────────────────────────────────────────────────────────────────────────────
  25.  
  26.  
  27. L'E.O.S est constitué de plusieurs fichiers.
  28.  
  29.         Objet de base :
  30.  
  31.         ■ KERNEL.OBJ    Le coeur du système.
  32.         ■ DIAMOND.OBJ   Le player 32 voies.
  33.         ■ EOS.OBJ       La version complète qui supporte Diamond.
  34.         ■ EOSLITE.OBJ   La version allégée si vous n'utilisez pas Diamond.
  35.         ■ DEBUG.OBJ     Le debugger 32 bits.
  36.  
  37.         ■ EOS.INC       Le fichier include.
  38.  
  39.  
  40.         Librairies :
  41.  
  42.         ■ VESA.OBJ      Pour accéder directement au buffer de la carte graphique
  43.                         sans se préoccuper des changements de bank en VESA.
  44.         ■ FLI32.OBJ     Pour visualiser les fichiers FLI et FLC.
  45.         ■ SNAP.OBJ      Pour la capture d'écrans 256 couleurs au format IFF.
  46.         ■ JOYSTICK.OBJ  Pour la gestion des manettes de jeux.
  47.  
  48.  
  49.         Utilitaires :
  50.  
  51.         ■ Light Link    Pour créer un seul fichier EXE compressé.
  52.         ■ Crypt         Pour protéger vos données.
  53.         ■ Scancode      Pour afficher les codes du clavier.
  54.         ■ 132           Pour passer en mode 132 colonnes.
  55.         ■ 90            Pour passer en mode 90 colonnes.
  56.         ■ Edconfig      Pour configurer le debugger
  57.         ■ Diet          Pour compresser vos données
  58.  
  59.  
  60. ───────────────────────────────────────────────────────────────────────────────
  61. Gestion de la mémoire avec l'E.O.S
  62. ───────────────────────────────────────────────────────────────────────────────
  63.  
  64.  
  65. Avec l'E.O.S, finit les problèmes de mémoire ! Vous pouvez désormais adresser
  66. linéairement toutes la mémoire disponible et cela quelques que soit la
  67. configuration de votre système.
  68.  
  69.         ■ Mode RAW  sans Himem.
  70.         ■ Mode XMS  avec Himem.
  71.         ■ Mode VCPI avec EMS (Emm386 highscan).
  72.         ■ Mode VCPI sans EMS (Emm386 noems).
  73.         ■ Mode DPMI avec Windows 3.1x (avec quelques restrictions *).
  74.         ■ Mode DPMI avec Windows 95.
  75.         ■ Mode DPMI avec OS/2 2.1 ou OS/2 Warp.
  76.  
  77. * Voir compatiblité avec Windows
  78.  
  79. Vous pouvez allouer ou restituer de la mémoire supérieur à l'aide d'une simple
  80. interruption de l 'E.O.S.
  81.  
  82.         Allocation :
  83.  
  84.                 mov ah,Allocate_Memory
  85.                 mov edx,Taille_Allocation
  86.                 Int_EOS
  87.                 jc Not_Enough_Memory
  88.                 mov [Logical_Address_Of_Block],edx
  89.  
  90.  
  91.         Restitution de la dernière allocation :
  92.  
  93.                 mov ah,DeAllocate_Memory
  94.                 Int_EOS
  95.  
  96.  
  97. Vous pouvez avec la même simplicité créer vos propre sélecteurs et profiter
  98. pleinement de la segmentation du mode protégé.
  99.  
  100.         Allocation d'un sélecteur :
  101.  
  102.                 mov ah,Allocate_Selector
  103.                 mov esi,0a0000h     ; base
  104.                 mov edi,0ffffh      ; taille
  105.                 Int_EOS
  106.                 jc No_Free Selector
  107.                 mov [_0a0000h_Sel],bx
  108.  
  109.  
  110.         Restitution d'un sélecteur :
  111.  
  112.                 mov ah,DeAllocate_Selector
  113.                 mov bx,[_0a0000h_Sel]
  114.                 Int_EOS
  115.                 jc Invalid_Selector
  116.  
  117.  
  118. ───────────────────────────────────────────────────────────────────────────────
  119. Gestion de fichiers avec l'E.O.S
  120. ───────────────────────────────────────────────────────────────────────────────
  121.  
  122.  
  123. Charger un fichier en mémoire n'est guère plus compliqué.
  124.  
  125.         Chargement d'un fichier externe :
  126.  
  127.                 mov ah,Load_External_File
  128.                 mov edx,offset File_name
  129.                 Int_EOS
  130.                 jc Error_File
  131.                 mov File_Buffer,eax
  132.  
  133.  
  134.         Chargement d'un fichier linké avec LightLink (Linker founit avec
  135.         l'E.O.S) :
  136.  
  137.                 mov ah,Load_Internal_File
  138.                 mov edx,offset File_name
  139.                 Int_EOS
  140.                 mov File_Buffer,eax
  141.  
  142. La fonction Load_Internal_File fonctionne aussi si le programme n'est pas
  143. linké. L'E.O.S est capable de distinguer les deux cas ce qui permet de
  144. développer et tester un programme sans avoir à linker les données.
  145. De plus, si votre fichier est compacté avec un format de type LZ comme
  146. Diet 1.44 l'E.O.S le décompresse automatiquement !
  147.  
  148.         Il est aussi possible de faire l'opération inverse :
  149.  
  150.                 mov ah,Write_External_File
  151.                 mov edx,O File_name
  152.                 mov esi,[Buffer]
  153.                 mov ecx,[Size_Buffer]
  154.                 Int_EOS
  155.                 jc Error_File
  156.  
  157.  
  158. ───────────────────────────────────────────────────────────────────────────────
  159. Gestion des cartes sonores avec l'E.O.S
  160. ───────────────────────────────────────────────────────────────────────────────
  161.  
  162.  
  163. La gestion des cartes sonores n'a pas été oubliée.
  164.  
  165. L'E.O.S est en effet capable de jouer un sample ou un module Amiga (de 2 à 32
  166. voix) sans la moindre programmation de votre part sur les sept cartes
  167. suivantes :
  168.  
  169.         ■ Sound Blaster
  170.         ■ Sound Blaster Pro
  171.         ■ Sound Blaster 16 Asp
  172.         ■ Sound Blaster AW32
  173.         ■ Gravis Ultrasound
  174.         ■ Gravis Ultrasound Max
  175.         ■ Gravis Ultrasound Ace
  176.  
  177.         Exemple :
  178.  
  179.                 mov ah,Detect_Sound_Card
  180.                 xor bx,bx
  181.                 mov cx,1
  182.                 Int_EOS
  183.  
  184.                 mov ah,Load_Module
  185.                 mov al,4
  186.                 mov ebx,22000
  187.                 mov edx,offset Module_name
  188.                 Int_EOS
  189.                 jc error_file
  190.  
  191.                 mov ah,Play_Module
  192.                 Int_EOS
  193.  
  194.                 Plusieurs fonctions sont alors disponibles :
  195.  
  196.                         Set Volume   Pour changer le volume de la musique
  197.                         Play Sample  Pour jouer un sample
  198.                         Get Info     Pour obtenir des infos sur la musique
  199.                                      (synchronisation par exemple)
  200.                         Set Pattern  Pour changer de position dans un module
  201.  
  202.                 call Pause
  203.  
  204.                 mov ax,4c00h
  205.                 int 21h
  206.  
  207.  
  208. Comme vous le voyez ci-dessus, vous n'êtes pas obligé d'arrêter la musique
  209. ou de libérer la mémoire avant de quitter votre programme. C'est l'E.O.S qui
  210. s'en charge. A chaque fois qu'il rencontre la fonction 4c00h ou lors
  211. d'un plantage programme, l'E.O.S restitue automatiquement
  212. l'environnement de départ :
  213.  
  214.         ■ Le mode vidéo y compris les modes VESA (132x60,etc...)
  215.         ■ L'heure de l'horloge.
  216.         ■ Les interruptions.
  217.         ■ La mémoire allouée.
  218.         ■ Stoppe la musique.
  219.  
  220. Bien entendu, il est toujours possible de libérer la mémoire et d'arrêter
  221. un module pour en charger un autre comme ci-dessous:
  222.  
  223.                 mov ah,Stop_Module
  224.                 Int_EOS
  225.  
  226.                 mov ah,Clear_Module
  227.                 Int_EOS
  228.  
  229. Pour les erreurs, l'E.O.S dispose d'une sortie spécialisée qui permet d'afficher
  230. un message d'erreur :
  231.  
  232.                 mov ah,Exit_Error
  233.                 mov edx,Offset Error_Txt
  234.                 Int_EOS
  235.  
  236. Cette fonction est identique à :
  237.  
  238.                 mov ah,9                    ; Fonction Display String
  239.                 mov edx,Offset Msg
  240.                 int 21h
  241.                 mov ax,4c01h
  242.                 int 21h
  243.  
  244. Il est également possible de restituer à tout moment le mode vidéo de départ...
  245.  
  246.                 mov ah,Restore_Video_Mode
  247.                 Int_EOS
  248.  
  249.  
  250. ───────────────────────────────────────────────────────────────────────────────
  251. Gestion d'un second ecran monochrome
  252. ───────────────────────────────────────────────────────────────────────────────
  253.  
  254.  
  255. Pour faciliter le débuggage de vos programmes, l'E.O.S fournit des fonctions de
  256. bases qui permettent de controler un deuxième écran via une carte monochome de
  257. type Hercule.
  258.  
  259. L'E.O.S détecte automatiquement votre écran. Cependant, si celui-ci n'était pas
  260. reconnu, vous pouvez utiliser la séquence suivante :
  261.  
  262.                 mov ah,Set_Mono
  263.                 mov bx,On
  264.                 Int_EOS
  265.  
  266. De nombreuses fonctions sont alors disponibles comme par exemple
  267. l'affichage d'une chaine de caratère ASCII ou d'une valeur Hexadécimal.
  268.  
  269.         Afficher une Chaine ASCII :
  270.  
  271.                 mov ah,Set_String_Mono
  272.                 mov bx,Coordonee X
  273.                 mov cx,Coordonee Y
  274.                 mov edx,Offset Chaine_A_Afficher
  275.                 Int_EOS
  276.  
  277.         Afficher une Valeur Hexadecimal :
  278.  
  279.                 mov ah,Set_Value_Mono
  280.                 mov bx,Coordonee X
  281.                 mov cx,Coordonee Y
  282.                 mov edx,Valeur_A_Afficher
  283.                 Int_EOS
  284.  
  285. Une macro est également disponible : Send qui permet une utilisation
  286. plus simple de la fonction Set_Value_Mono
  287.  
  288.         Afficher une Valeur sur l'écran monochrome :
  289.  
  290.                 Send Valeur_A_Afficher,X,Y
  291.  
  292. La chaine ASCII peut se terminer soit par $ soit par le caractère NULL.
  293. La fonction prend aussi en compte les caractères retour chariot (13 et 10).
  294. Les valeurs en hexadécimal ne doivent pas dépasser 16 Bits.
  295.  
  296. Attention : Pour un gains de temps aucun test n'est effectué au niveau des
  297.             coordonnées de l'écran.
  298.  
  299. Note : L'ecran Monochrome est automatiquement effacé au début et a la fin d'un
  300.        programme.
  301.  
  302.  
  303. ───────────────────────────────────────────────────────────────────────────────
  304. Gestion du clavier avec l'E.O.S
  305. ───────────────────────────────────────────────────────────────────────────────
  306.  
  307.  
  308. Une gestion clavier trés simple à été implantée dans l'E.O.S afin de vous
  309. faciliter la vie. Pour l'activer il faut prendre le controle de l'interruption
  310. 09 comme ci-dessous :
  311.  
  312.         Activation du gestionnaire de clavier
  313.  
  314.                 mov ah,Use_Int_09
  315.                 mov bx,On
  316.                 Int_EOS
  317.  
  318. Le clavier est alors entièrement gérer par l'E.O.S qui dialogue directement
  319. avec lui. Il n'y a plus aucun appel vers les anciens gestionnaires du
  320. DOS. L'interruption 16h ne fonctionne donc plus.
  321.  
  322. La lecture du clavier devient alors très facile grace à la variable Key_Map.
  323. Cette variable est en réalité un tableau de 128 octets qui correspond
  324. au 128 scancodes renvoyés par le clavier.
  325. Pour connaitre l'état d'une touche il suffit de savoir si sont scancode et
  326. à 0 ou 1 (On ou Off).
  327.  
  328.         Exemple, pour tester si la touche Escape est actuellement enfoncée :
  329.  
  330.                 cmp Key_Map[Escape],On
  331.                 je Touche_Escape_Enfoncé
  332.  
  333.                 ...
  334.  
  335.         Touche_Escape_Enfoncé:
  336.                 mov Key_Map[Escape],Off
  337.  
  338. Un scancode special "All" est utilisé pour savoir une touche a été enfoncée
  339. puis relachée.
  340.  
  341.         Exemple, pour tester si la touche Escape à été enfoncée :
  342.  
  343.                 cmp Key_Map[All],Escape
  344.                 je Touche_Escape_Enfoncer
  345.  
  346. Ce qui permet d'attendre une touche quelconque :
  347.  
  348.         @@Attend_Touche:
  349.                 cmp Key_Map[All],Off
  350.                 je @@Attend_Touche
  351.                 mov Key_Map[All],Off
  352.  
  353. Il est bien entendu possible de désactiver le clavier et de revenir à l'ancien
  354. gestionnaire.
  355.  
  356.         Restauration du clavier :
  357.  
  358.                 mov ah,Use_Int_09
  359.                 mov bx,Off
  360.                 Int_EOs
  361.  
  362. Note : A la fin du programme, l'E.O.S restitue toutes les interruptions la
  363.        restauration de l'interruption 09 n'est donc pas obligatoire.
  364.  
  365.  
  366. ───────────────────────────────────────────────────────────────────────────────
  367. Synchronisation avec le balayage
  368. ───────────────────────────────────────────────────────────────────────────────
  369.  
  370.  
  371. L'E.O.S possède son propre système de synchronisation.
  372.  
  373.         Controle du retracage de l'ecran :
  374.  
  375.                 mov ah,Wait_Vbl
  376.                 Int_EOS
  377.  
  378. L'utilisation de l'interruption 08 ou timer permet d'augmenter les capacités
  379. de cette fonction. Comme pour l'interruption clavier il n'y a pas d'appel vers
  380. les anciens gestionnaires.
  381.  
  382.         Activation du gestionnaire de synchronisation :
  383.  
  384.                 mov ah,Use_Int_08
  385.                 mov bx,On
  386.                 Int_EOS
  387.  
  388. En retour, Wait_Vbl renvoie alors le nombre de balayage éffectué depuis le
  389. dernier appel. Cette fonction renvoie toujours 1 si l'interruption 08 est Off.
  390.  
  391. Grace à l'utilisation de cette interruption et à la fonction Wait_Vbl votre
  392. programme est toujours capable de savoir combien de frame il à perdu. On
  393. dispose ainsi d'un compteur régulier trés pratique pour le calcul des
  394. déplacements.
  395.  
  396. Attention : Cette fonction est instable sous Windows 3.xx.
  397.  
  398. Si vous changez de mode video, vous devez vous resynchroniser avec
  399. Synchro_Int_08 comme ci-dessous :
  400.  
  401.             mov ax,13h
  402.             DosInt 10h
  403.             mov ah,Synchro_Int_08
  404.             Int_EOS
  405.  
  406. Une macro est aussi disponible : Colors qui permet de changer une couleur
  407. temporairement pour décomposer chaque routine de votre programme.
  408.  
  409.         Fonction Colors:
  410.  
  411.                 colors Numero_de_couleur,Valeur_Rouge,Valeur_Verte,Valeur_bleue
  412.  
  413.  
  414.         Exemple d'utilisation des fonctions de balayage :
  415.  
  416.         @@Boucle:
  417.                 colors 0,63,0,0     ; Première couleur en Rouge vif
  418.                 call Procedure_1
  419.                 colors 0,0,63,0     ; Deuxièmme couleur en Ver Vif
  420.                 call Procedure_2
  421.                 mov ah,Wait_Vbl
  422.                 Int_EOS
  423.         @@Compt:
  424.                 add [Valeur_Reguliere],1
  425.                 dec eax             ; On additionne des valeures regulières
  426.                 jne @@Compt
  427.                 cmp [Key_Map+All],On
  428.                 jne @@Boucle
  429.  
  430.  
  431. ───────────────────────────────────────────────────────────────────────────────
  432. Les variables de l'E.O.S
  433. ───────────────────────────────────────────────────────────────────────────────
  434.  
  435.  
  436. L'E.O.S possède quelques variables global qui peuvent être nécessaires à
  437. tout moment lors de l'execution d'un programme :
  438.  
  439.  
  440. Code32_Sel : Selecteur de code (CS).
  441. ----------
  442.  
  443.         Exemple : Détourner l'interruption 70h :
  444.  
  445.                 mov ah,Set_Int
  446.                 mov bx,70h
  447.                 mov cx,[Code32_Sel]         ; Selecteur
  448.                 mov edx,O New_Int_70h       ; Offset de la nouvelle routine
  449.                 Int_EOS
  450.  
  451. Attention ! En mode protégé il est interdit de faire :
  452.  
  453.                 mov cs:[Valeur],10
  454.  
  455. Cela declencherait une exception et arreterait votre programme.
  456.  
  457.  
  458. Data32_Sel : Selecteur de Données (DS).
  459. ----------
  460.  
  461.         Exemple d'utilisation de Data32_Sel :
  462.  
  463.                 Valeur  dd 0
  464.  
  465.                 mov [Valeur],10
  466.  
  467. En fait, les selecteurs Code32_Sel et Data32_Sel sont identiques.
  468. La différence porte sur leur accés. Code32_Sel est en lecture alors
  469. que Data32_Sel est en lecture et écriture.
  470.  
  471. Au debut d'un programme tout les registres de segment (sauf CS) sont
  472. initialisés avec la valeur de Data32_Sel.
  473.  
  474.  
  475.  
  476. Zero_Sel : Sélecteur qui a pour origine l'adresse zero de la
  477. --------   mèmoire. Très utile pour lire par exemple les variables
  478.            du BIOS.
  479.  
  480.         Lire le mode video courant :
  481.  
  482.                 push es
  483.                 mov es,cs:[Zero_Sel]
  484.                 mov al,es:[449h]            ; 40h:49h en mode réel
  485.                 pop es
  486.  
  487.  
  488. Real_DS,Real_ES,Real_FS,Real_GS,Real_SS,Real_SP :
  489. -----------------------------------------------
  490.  
  491. Ces variables contienent les futures valeurs des differents segments lors d'un
  492. appel en mode réel (Voir Le mode Réel).
  493.  
  494.  
  495. ───────────────────────────────────────────────────────────────────────────────
  496. Les macros de l'E.O.S
  497. ───────────────────────────────────────────────────────────────────────────────
  498.  
  499.  
  500. L'E.O.S possède des macros qui permettent de simplifier la programmation.
  501.  
  502.         Macro Colors:
  503.  
  504.                 colors Numero_de_couleur,Valeur_Rouge,Valeur_Verte,Valeur_bleue
  505.  
  506.         (Voir Synchronisation avec le balayage)
  507.  
  508.         Get_Param:
  509.  
  510.                 Get_Param Param_Buffer
  511.  
  512.                 ...
  513.  
  514.                 Param_Buffer db 128 dup (0)
  515.  
  516.         Renvoie dans Param_Buffer les paramètres de la ligne de commande.
  517.  
  518.         Macro Send:
  519.  
  520.                 Send Valeur_A_Afficher,X,Y
  521.  
  522.         (Voir Gestion d'un second ecran monochrome)
  523.  
  524.         Macro DosInt:
  525.  
  526.                 DosInt Numero_d_interruption
  527.  
  528.         (Voir Le mode réel)
  529.  
  530.         Macro DosCall:
  531.  
  532.                 DosCall Addresse Mode reel
  533.  
  534.         (Voir Le mode réel)
  535.  
  536.         Macro Init_es_di:
  537.  
  538.                 Init_es_di Offset adresse 32 bits
  539.  
  540.         (Voir Le mode réel)
  541.  
  542.         Macro Init_ds_dx:
  543.  
  544.                 Init_ds_dx Offset adresse 32 bits
  545.  
  546.         (Voir Le mode réel)
  547.  
  548.  
  549. ───────────────────────────────────────────────────────────────────────────────
  550. Le fichier Include (EOS.INC)
  551. ───────────────────────────────────────────────────────────────────────────────
  552.  
  553.  
  554. Le fichier include EOS.INC est certainement le fichier le plus important.
  555. Il contient en effet toutes les déclarations des différentes fonctions, macros
  556. et variables de l'E.O.S. C'est grace à lui que votre programme est en mesure
  557. de dialoguer avec l'E.O.S. Il sert également de guide de référence.
  558.  
  559.  
  560. ───────────────────────────────────────────────────────────────────────────────
  561. Le mode réel
  562. ───────────────────────────────────────────────────────────────────────────────
  563.  
  564.  
  565. Le mode réel est accessible à partir de l'E.O.S à l'aide de macros.
  566.  
  567.  
  568.         Pour appeller une interruption (Int) du mode réel :
  569.  
  570.                 DosInt Numero_d_interruption
  571.  
  572.         Exemple :
  573.  
  574.                 mov ax,13h                  ; Mode 320x200 256 Couleurs
  575.                 DosInt 10h                  ; Appel de la fonction BIOS
  576.                                             ; Set Video Mode
  577.  
  578.         Pour appeller une fonction (Call) en mode réel :
  579.  
  580.                 DosCall Adresse Mode reel
  581.  
  582.         Exemple :
  583.  
  584.                 XMS_Adresse dw 0,0
  585.  
  586.                 mov ax,4300h                ; Fonction qui teste si un
  587.                 DosInt 2fh                  ; Driver XMS est présent
  588.                 cmp al,80h
  589.                 je No_XMS_Driver
  590.                 mov ax,4310h                ; Si oui demande son point
  591.                 DosInt 2fh                  ; d'entré
  592.                 mov [XMS_Adresse],bx
  593.                 mov eax,[Real_ES]
  594.                 mov [XMS_Adresse+2],ax
  595.                 xor ah,ah                   ; Fonction 0 du driver XMS
  596.                 DosCall Dword Ptr [XMS_Adresse] ; Get XMS Version
  597.  
  598.  
  599.         Pour initialiser les variables qui seront utilisées en mode reel :
  600.  
  601.                 Init_es_di Adresse 32bits
  602.                 Init_ds_dx Adresse 32bits
  603.  
  604.         Exemple :
  605.  
  606.                 Vesa_Buffer db 256 dup (0)
  607.  
  608.                 Init_es_di Vesa_Buffer
  609.                 mov ax,4f00h                ; Teste le présence d'un
  610.                 DosInt 10h                  ; Driver VESA
  611.  
  612.                 cmp dword ptr Vesa_Buffer,'ASEV'
  613.                 jne no_vesa
  614.  
  615.  
  616. ───────────────────────────────────────────────────────────────────────────────
  617. Le linker
  618. ───────────────────────────────────────────────────────────────────────────────
  619.  
  620.  
  621. L'E.O.S dispose d'un utilitaire (LLINK32.EXE) qui permet de creer un seul
  622. fichier executable à partir de plusieurs fichiers de données.
  623.  
  624.         prg.exe
  625.         image.pcx   ---->   final.exe
  626.         musique.mod
  627.  
  628. Une fois linké, les fichiers de données sont accesibles très façilement à
  629. l'aide de la fonction Load_internal_File.
  630.  
  631.         Exemple de l'utilisation de Load_Internal_File et Load_External_File :
  632.  
  633.                 Fichier_Linker  db 'IMAGE.PIC',0
  634.                 Fichier_Externe db 'PRG.CFG',0
  635.  
  636.                 mov ah,Load_Internal_File   ; Charge un fichier qui peut
  637.                 mov edx,O Fichier_Linker    ; être linker
  638.                 Int_EOS                     ; Pas d'erreur possible
  639.                                             ; elle sont gerées pas l'E.O.S
  640.  
  641.                 mov ah,Load_External_File   ; Charge un fichier externe
  642.                 mov edx,O Fichier_Externe
  643.                 Int_EOS
  644.                 jc Error_Loading            ; erreur de lecture
  645.  
  646.  
  647. Pour indiquer à LLINK32 la liste des fichiers à linker il suffit créer un
  648. fichier de lien comme ci-dessous.
  649.  
  650.         Contenu d'un fichier de lien (prg.eos) :
  651.  
  652.                 FINAL.EXE                   ; Nom de l'executable qui sera
  653.                                             ; creer
  654.                 PRG.EXE                     ; Nom de l'executable qui sera
  655.                                             ; linker
  656.                 IMAGE.PCX                   ; Fichier Data qui sera linker
  657.  
  658.                 MUSIQUE.MOD                 ; Fichier Data qui sera linker
  659.  
  660.                 :END                        ; Fin du fichier
  661.  
  662.         Linkage :
  663.  
  664.                 LLINK32 prg.ros
  665.  
  666. Attention ! Les fichiers linkés doivent être compressés avec Diet.
  667.  
  668. Afin de faciliter la programmation, il est possible d'utiliser la fonction
  669. Load_Internal_File avec des fichiers externes. Ce qui permet de linker un
  670. programme lorsqu'il est entierement terminé (Voir Example4).
  671.  
  672.  
  673. ───────────────────────────────────────────────────────────────────────────────
  674. Les Interruptions avec l'E.O.S
  675. ───────────────────────────────────────────────────────────────────────────────
  676.  
  677.  
  678. L'E.O.S permet de modifier les interruptions grace au fonction Get_Int et
  679. Set_Int.
  680.  
  681.         Exemple : Détourner l'interruption 70h :
  682.  
  683.                 mov ah,Get_Int              ; Lit L'ancien vecteur
  684.                 mov bx,70h
  685.                 Int_EOS
  686.                 mov [Old_Selector_Int_70h],cx
  687.                 mov [Old_Offset_Int_70h],edx
  688.                 mov ah,Set_Int
  689.                 mov bx,70h
  690.                 mov cx,[Code32_Sel]         ; Selecteur
  691.                 mov edx,O New_Int_70h       ; Offset de la nouvelle routine
  692.                 Int_EOS
  693.  
  694.  
  695. L'E.O.S met aussi à la disposition du programmeur toutes une serie de fonction
  696. accessible via l'interruption 21h.
  697.  
  698. Les fonctions sont :
  699.                    Display String           9h
  700.                    Make Directory          39h
  701.                    Remove_Directory        3ah
  702.                    Change_Directory        3bh
  703.                    Create_File             3ch
  704.                    Open_File               3dh
  705.                    Close_File              3eh
  706.                    Read_File               3fh
  707.                    Write_File              40h
  708.                    Delete_File             41h
  709.                    Seek_File               42h
  710.                    File_Attributes         43h
  711.                    Get_Directory           47h
  712.                    Load_and_Execute        4bh
  713.                    Terminate_Program       4ch
  714.                    Find_First              4eh
  715.                    Find_Next               4fh
  716.                    Rename_File             56h
  717.                    Create_Temporary_File   5ah
  718.                    Create_New_File         5bh
  719.  
  720.         Exemple : Afficher un message :
  721.  
  722.                 Msg db 'Hello Word',13,10,36
  723.  
  724.                 mov ah,9                    ; Fonction Display String
  725.                 mov edx,Offset Msg
  726.                 int 21h
  727.                 mov ax,4c00h
  728.                 int 21h
  729.  
  730. Attention ! Pour terminer un programme il faut IMPERATIVEMENT appeler la
  731.             fonction 4ch de l'interruption 21h
  732.  
  733. La fonction Direct_Send de l'E.O.S vous permet d'écrire directement en
  734. Ram vidéo et d'employer des couleurs :
  735.  
  736.             lea edx,Message
  737.             mov ah,Direct_Send
  738.             Int_EOS
  739.  
  740.             ...
  741.  
  742. Message             db "    ",0,1,"■ Color Blue ",0,4,"Red ",13,10,0,0
  743.  
  744.  
  745. ───────────────────────────────────────────────────────────────────────────────
  746. Les IRQ ou interruptions materielle avec l'E.O.S
  747. ───────────────────────────────────────────────────────────────────────────────
  748.  
  749.  
  750. Toutes les IRQ sont accessible dans votre programme. Par contre L'E.O.S a
  751. reprogammé ses interruptions pour eviter des conflits avec les exceptions du
  752. mode protégé. Pour utiliser une IRQ l'E.O.S met a la disposition du programmeur
  753. deux fonctions :
  754.  
  755.         Get_IRQ :
  756.  
  757.                 Fonction qui renvoie l'adresse d'une IRQ.
  758.  
  759.         Set_IRQ :
  760.  
  761.                 Fonction qui detourne une IRQ.
  762.  
  763.  
  764.         Exemple d'utilisation :
  765.  
  766.         Old_IRQ0 Label Fword
  767.         Old_Offset_IRQ0    dd 0
  768.         Old_Selector_IRQ0  dw 0
  769.  
  770.                 mov ah,Get_IRQ
  771.                 mov bl,0            ; IRQ timer
  772.                 Int_EOS
  773.                 mov [Old_Selector_IRQ0],cx
  774.                 mov [Old_Offset_IRQ0],edx
  775.                 mov ah,Set_IRQ
  776.                 mov bl,0            ; IRQ timer
  777.                 mov cx,cs
  778.                 mov edx,Offset New_IRQ0
  779.                 Int_EOS
  780.                 ...
  781.  
  782.         New_IRQ0:
  783.                 ...
  784.                 jmp fword ptr cs:[Old_IRQ0]
  785.  
  786.  
  787. ───────────────────────────────────────────────────────────────────────────────
  788. Les Exceptions avec l'E.O.S
  789. ───────────────────────────────────────────────────────────────────────────────
  790.  
  791.  
  792. Toutes les exceptions sont gerées par l'E.O.S.
  793.  
  794. Lorsque l'une d'elle se déclenche, l'E.O.S arrête votre programme et restitue
  795. automatiquement la memoire allouée et le mode video de depart.
  796.  
  797.  
  798. ───────────────────────────────────────────────────────────────────────────────
  799. Compatibilité avec Windows (tm)
  800. ───────────────────────────────────────────────────────────────────────────────
  801.  
  802.  
  803. L'E.O.S est compatible avec Windows 3.x (tm) et Windows 95 (tm). Cependant
  804. du fait du niveau de privilege que Windows laisse a votre programme (le plus
  805. mauvais), il est conseillé de ne pas utliser les fonctions Use_Int_08 et le
  806. player DIAMOND si vous voulez que votre programme fonctionne correctement .
  807. Sous windows 95 seul des ralentissements se feront sentir, mais sous windows
  808. 3.x vous risquez de planter votre système.
  809.  
  810. L'E.O.S met donc a votre disposition une fonction qui detecte la presence de
  811. windows 3.x et windows 95 et vous laisse le choix d'arreter le programme ou
  812. non.
  813.  
  814.         Detect_Windows :
  815.  
  816.                 Fonction renvoir si Windows est present
  817.  
  818.  
  819.         Exemple d'utilisation :
  820.  
  821.                 mov ah,Detect_Windows
  822.                 Int_EOS
  823.                 test al,al
  824.                 je No_Windows
  825.                 cmp al,3
  826.                 je Find_Windows_3
  827.                 cmp al,4
  828.                 je Find_Windows_95
  829.         Find_Windows_96:
  830.  
  831. Un conseil : Si votre programme utilise des resources hardware ne le
  832. faites pas marcher sous windows.
  833.  
  834.  
  835. ───────────────────────────────────────────────────────────────────────────────
  836. Le debugger
  837. ───────────────────────────────────────────────────────────────────────────────
  838.  
  839.  
  840. Le debugger est un fichier objet externe qu'il vous suffit d'include au moment
  841. du linkage et d'appeler dans votre programme : CALL DEBUG (voir exemple 6).
  842.  
  843. Les fonctions du debugger sont identiques à Turbo Debug 2.01 de borland.
  844.  
  845. Un utilitaire est aussi fourni pour configurer le debugger : EDCONFIG.EXE.
  846.  
  847. Note : Pour plus d'infos taper EDCONFIG -h